/**
 * 格式化vue的data数据
 * 目前只能格式化自定义变量和页面入参
 */
const forMatVueViewModel = (exportDefault) => {
  const data = exportDefault.data ? exportDefault.data() : {};

  const provide = exportDefault.provide? exportDefault.provide() : { $model: {}  };

  const viewModel = {};
  Object.keys(data).forEach(v => {
    // 意味着当前值和当前属性值相同，是外部引入的不需要生成viewModel
    if(v === data[v]){ return }

    // 生成字符串的自定义变量
    if(typeof data[v] == 'string'){
      viewModel[v] = initCustomData(v, data[v], 'text', false)
      return
    }

    // 生成数组的自定义变量 && !provide.$model[v]
    if(Array.isArray(data[v])){
      viewModel[v] = initCustomData(v, data[v], 'text', true)
      return
    }

    // 生成对象的自定义变量
    if(data[v] instanceof Object && !provide.$model[v]){
      viewModel[v] = initCustomData(v, data[v], 'object', false)
      return
    }

    // 生成数字的自定义变量
    if(typeof data[v] == 'number'){
      viewModel[v] = initCustomData(v, data[v], 'integer', false)
      return
    }

    // 生成布尔值的自定义变量
    if(typeof data[v] == 'boolean'){
      viewModel[v] = initCustomData(v, data[v], 'boolean', false)
      return
    }

    // 表示是模型视图中值且勾选了视图方法 [目前生成不了，因为获取不了当前实体的勾选参数和使用参数]
    // if(provide.$model[v] && Array.isArray(data[v])){
    //   viewModel[v] = initModuleModelList(v, data[v])
    // }
  })

  // 生成页面入参
  Object.keys(exportDefault.props || {}).forEach(v=> {
    
    let defaultValue = exportDefault.props[v].hasOwnProperty('default')? exportDefault.props[v].default : '';

    switch(exportDefault.props[v].type.name){
      case 'String':
        viewModel[v] = initPageInputParam(v, defaultValue, 'text')
        break;
      case 'Number':
        viewModel[v] = initPageInputParam(v, defaultValue, 'integer')
        break;
      case 'Boolean':
        viewModel[v] = initPageInputParam(v, defaultValue, 'boolean')
        break;
      default:
        viewModel[v] = initPageInputParam(v, defaultValue, 'text')
    }

    
  })

  return viewModel
}

/**
 * 生成自定义变量
 */
const initCustomData = (key, value, type, list = false) => {
  return {
    name: key,
    label: key,
    description: '自定义变量',
    dataType: {
      type: type,
      list: list
    },
    defaultValue: JSON.stringify(value),
    vmDataType: "customData"
  }
}

/**
 * 生成页面入参
 */
const initPageInputParam = (key, value, type) => {
  return {
    name: key,
    label: `页面入参${key}`,
    description: "页面入参",
    dataType:{
        type: type,
        entity: null,
        list: false
    },
    defaultValue: value,
    methods: [],
    fields: [],
    vmDataType:"pageInputParam"
  }
}


/**
 * 生成模型对象
 */
const initModuleModelList = () => {
  return {
    name:"cljgTable",
    label:"设备材料价格库详情表",
    description:"设备材料价格库详情表",
    dataType:{
        type:"object",
        entity:"Comsbcljg$ComSbcljgDetail",
        list:true
    },
    fields: [],
    defaultValue: [],
    vmDataType: "modelData",
    methods:[
      {
        methodName: "queryList",
        filterRule: {
            op: "and",
            children: []
        },
        sortRule:[]
      }
    ]
  }
}